<?php
function _preg_($str){
	$str= preg_replace(array("/([^\$\w\"\'<>]{1}|^)(\_{1}[a-z0-9]{2}[a-zA-Z0-9\-_]{0,})/"
		,"/^(\s)*(\_{1}[a-z0-9]{2}[a-z0-9\-_]{0,})/"),"\\1<font class=\"myfunc\"><b>\\2</b></font>",$str);//高亮带_的函数
$datatypes='ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' .
						'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' .
						'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' .
						'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' .
						'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' .
						'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' .
						'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' .
						'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' .
						'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' .
						'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' .
						'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' .
						'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' .
						'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' .
						'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' .
						'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' .
						'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM '.
						'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' .
						'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' .
						'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' .
						'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' .
						'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' .
						'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' .
						'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' .
						'va_list wchar_t wctrans_t wctype_t wint_t signed '.
						'DTPCHAR DT_CONST_PCHAR unsigned';
//$arr=_str2arr($arrstr,' {1,}');	
$str=preg_replace(array("/([^a-zA-Z0-9\._]|^)([\-]{0,1}[0-9]{1,})([^A-Z\-]{0})/","/([^a-zA-Z0-9]|^)([\.x][0-9]{1,})()/")
,"\\1-FENGEFUS-d-FENGEFUD-"."\\2"."-FENGEFUS-xd-FENGEFUD-\\3",$str);//高亮数字


    $datatypes=_str2arr($datatypes,'/\s{1,}/');	

    $pattern_arr=array();	
    foreach(  $datatypes as $k=>$v  ){ 
	 $pattern_arr[]='/([\'\s\(,\t\*>])('.$v.')([\)\s\(\',\t\*<])/'; 
	 $pattern_arr[]='/^([\s]{0,})('.$v.')([\)\s\(\*\&,\t])/';  }	
    $retstr= preg_replace_callback($pattern_arr,"_preg_cb",$str);	
	
	//1 replace
	
	$keywords =	'break case catch class const __finally __exception __try ' .
						'const_cast continue private public protected __declspec ' .
						'default delete deprecated dllexport dllimport do dynamic_cast ' .
						'else enum explicit extern if for friend goto inline ' .
						'mutable naked namespace new noinline noreturn nothrow ' .
						'register reinterpret_cast return selectany ' .
						'sizeof static static_cast struct switch template this ' .
						'thread throw true false try typedef typeid typename union ' .
						'using uuid virtual void volatile whcar_t while function #include  #define #define #pragma '.
						'comment #ifndef #endif as  foreach #ifdef array main WinMain var';//main WinMain 是我自己定义的
	$keywords=_str2arr($keywords,'/\s{1,}/');	
    $pattern_arr2=array();	
    foreach(  $keywords as $k=>$v  ){ 
	 
	  $pattern_arr2[]='/([\s\(\}\{\=,])('.$v.')([\)\s\(\:\{\;])/';
	   $pattern_arr2[]='/^(\s*)('.$v.')([\)\s\(\:\&;])/';
	//$pattern_arr2[]='/(\s*|\(*)('.$v.')([\)\s\(\:\&;])/';
	 }	
	
    $retstr= preg_replace_callback($pattern_arr2,"_preg_cb2",$retstr,-1);	

	//60str 

	 $retstr= preg_replace("/\t/","    ",$retstr);//tab替换
	
	 $functions =	'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' .
						'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' .
						'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' .
						'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' .
						'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' .
						'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' .
						'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' .
						'fwrite getc getchar gets perror printf putc putchar puts remove ' .
						'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' .
						'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' .
						'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' .
						'mbtowc qsort rand realloc srand strtod strtol strtoul system ' .
						'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' .
						'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' .
						'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' .
						'clock ctime difftime gmtime localtime mktime strftime time  MessageBox PostQuitMessage DestroyWindow '.
						'PostQuitMessage DefWindowProc ValidateRect TranslateMessage DispatchMessage ShowWindow '.
						'UpdateWindow RegisterClassEx UnregisterClass';
						
		$functions=_str2arr($functions,'/\s{1,}/');	
    $pattern_arr3=array();	
    foreach(  $functions as $k=>$v  ){  
	 $pattern_arr3[]='/([\s\(]|^)('.$v.')([\)\s\(])/';
	//$pattern_arr3[]='/([^a-zA-Z0-9<>]|^)('.$v.')([^a-zA-Z0-9<>]|$)/';
	}	
	
    $retstr= preg_replace_callback($pattern_arr3,"_preg_cb3",$retstr);		
			 
		
	$myfunctions='unregister_class msu_window Direct3D_Init SAFE_RELEASE';
	//
		  $retstr= preg_replace_callback(array("/([\$]{1}[a-zA-Z_0-9]{1,})/"),"_preg_cb_var",$retstr);	//高亮变量
	
	 $retstr= preg_replace(array(
	"/([^a-zA-Z0-9_\-<>]|^)((?:[sgv]{1}_|[inprlhsw][A-Z_]|ch[A-Z_]|char[A-Z_]|fn[A-Z_]|".
	"b[A-Z_]|lp[A-Z_]|h[A-Z_]|str[A-Z_]|sz[A-Z_]|by[A-Z_]|v[A-Z_]|msg[A-Z_]|dw[A-Z_]|dt)[a-zA-Z_0-9]{0,})/")
	,'\\1<font  style="color:#06f;font-size:18px;"><b>'.'\\2'.'</b></font>\\3',$retstr);	//高亮变量
	
		  for($j=0;$j<1;$j++){
			  $retstr= preg_replace(array(
"/([^a-zA-Z0-9_\-<>\"\']|^)(ix|iy|iz|cx|cy|[a-z]|ps|msg|hwnd|light|source|des|Direction)([^a-zA-Z0-9_<>\"\'&])/")
,'\\1<font  style="color:#06f;font-size:18px;"><b>'.'\\2'.'</b></font>\\3',$retstr);	//高亮变量
		  }
	
	$retstr= preg_replace(array("/([^a-zA-Z0-9_\-<>\"\']|^)(ix|iy|iz|cx|cy|[a-z])([0-9]{1,})([^a-zA-Z0-9_<>\"\'])/")
	,'\\1<font  style="color:#06f;font-size:18px;"><b>'.'\\2\\3'.'</b></font>\\4',$retstr);	//高亮变量
	
 $retstr= preg_replace_callback(array("/(\&quot;.{0,}?\&quot;)/","/(\'.{0,}?\')/"),"_preg_cb_str",$retstr);	//高亮字符串	 	

	$retstr= preg_replace(array(
	"/(^|[^a-zA-Z_0-9\-])(DT[a-zA-Z_0-9]{1,})/")
	,'\\1<font  style="color:#ff6600;font-size:18px;"><b>'.'\\2'.'</b></font>\\3',$retstr);//自定义数据类型
	
	$retstr=preg_replace("/(^|[^a-zA-Z_<>])(C[Ll][a-zA-Z_0-9]{1,})/"
	,"\\1<font style='color:#cc9900;'><b>\\2</b></font>",$retstr);//高这类
	$retstr=preg_replace("/(^|[^a-zA-Z_<>])([_]{0,2})".
	"(mf_|Set|Get|Mf|Mk|Format|Strips|".
	"(?:&gt;)[A-Z][a-km-z])([a-zA-Z_0-9]{0,})/"
	,"\\1<font style='color:#000;'><b>\\2\\3\\4</b></font>",$retstr);//高成员函数
	
	$retstr=preg_replace("/(^|[^a-zA-Z_<>])([_]{0,2})".
	"(St[A-Z]|".
	"(?:[\:]{1})[A-Z][a-km-z])([a-zA-Z_0-9]{0,})/"
	,"\\1<font style='color:#ee9999;'><b>\\2\\3\\4</b></font>",$retstr);//高静态成员函数
	$retstr=preg_replace("/(^|[^a-zA-Z_<>])([_]{0,2})(m_|mr|m[A-Z]|Fallo)([a-zA-Z_0-9]{0,})/"
	,"\\1<font style='color:#339c33;'><b>\\2\\3\\4\\5</b></font>",$retstr);//高成员
	
		$myfunctions=_str2arr($myfunctions,'/\s{1,}/');	
    $pattern_arr4=array();	
    foreach(  $myfunctions as $k=>$v  ){ 
	  $pattern_arr4[]='/([\=\s\(]|^)('.$v.')([\)\s\(])/';//0719
	//$pattern_arr4[]='/([^a-zA-Z0-9<>]|^)('.$v.')([^a-zA-Z0-9<>]|$)/';
	 }		
    $retstr= preg_replace_callback($pattern_arr4,"_preg_cb4",$retstr);		
	
		//$retstr= preg_replace(array("/([^\$\w\"\';]{1}|^)(\_{1}[a-zA-Z0-9][a-zA-Z0-9\-_]{0,})/"
		//,"/^(\s)*(\_{1}[a-zA-Z0-9][a-z0-9\-_]{0,})/"),"\\1<font class='myfunc'><b>\\2</b></font>",$retstr);//高亮带_的函数
		 		
	$retstr=preg_replace(array( 
	"/(-FENGEFUS-d-FENGEFUD-)([\-]?[0-9]{1,})(-FENGEFUS-xd-FENGEFUD-)/",
	"/(-FENGEFUS-d-FENGEFUD-)([\.x][0-9]{1,})(-FENGEFUS-xd-FENGEFUD-)/"
	
	),"<font style='color:#de0022'><b>\\2</b></font>",$retstr);//高亮数字ff9c00
	
	
		$retstr= preg_replace(array("/(&lt;\?php|\?&gt;|&lt;\?)/"),array("<font style='color:red;'><b>\\1</b></font>"
		,"<font style='color:red;font-size:22px;'><b>\\1</b></font>"),$retstr);	//高亮php标签
	$retstr= preg_replace(array("/([\{\}\(\)\]\[])/"),array("<font class='kh'><b>\\1</b></font>"
	,"<font style='color:red;font-size:22px;'><b>\\1</b></font>"),$retstr);	// 高亮大小括号 
	$retstr=preg_replace("/(^|[^[a-zA-Z0-9_;]|\[)([A-Z_]{2,}_{1})([^a-zA-Z_0-9]{1}|$|\])/"
	,"\\1<font style='color:#0099cc'><b>\\2</b></font>\\3",$retstr);//高亮常量
	//$retstr=preg_replace("/(^|[^[a-zA-Z0-9_;])([A-CE-Z_0-9][A-Z_0-9]{1,}_{1}[A-Z0-9_]{2,})([^a-zA-Z_0-9]{0}|$)/","\\1<font style='color:#0099cc'><b>\\2</b></font>\\3",$retstr);//高亮常量
	$retstr= preg_replace_callback(array("/(\s{0,}\/\/.{0,})[^$]/"),"_preg_cb_zhushi",$retstr);	//高亮注释
    $retstr= preg_replace("/^(\s+) /","\\1",$retstr);
	return $retstr;
}


function _preg_cb($matchs){//type
	return  $matchs[1].'<font  style="color:#fc0022;font-size:18px;"><b>'.$matchs[2].'</b></font>'.$matchs[3];
}//#009  #FF2200
function _preg_cb2($matchs){//key

	return  $matchs[1].'<font  style="color:#0033cc;font-size:18px;"><b>'.$matchs[2].'</b></font>'.$matchs[3];
}
function _preg_cb_zhushi($matchs){
	return  '<span style="color:#cc6600;font-size:18px;"><b><i>'.preg_replace("/<.*?>/","",$matchs[1]).'</i></b></span>';
}//f90   066
function _preg_cb_str($matchs){
	//secho($matchs);
	//return  '<font  style="color:#060;font-size:18px;"><b>'.$matchs[1].'</b></font>';
	 return  '<font  style="color:#060;font-size:18px;"><b>'.preg_replace("/<.*?>/","",$matchs[1]).'</b></font>';//33ccff c00 
	
}
function _preg_cb3($matchs){//func
	return  $matchs[1].'<font  style="color:#ff3399;font-size:18px;"><b>'.$matchs[2].'</b></font>'.$matchs[3];
}//ff3399  functions
function _preg_cb4($matchs){//my func
	return  $matchs[1].'<font  style="color:#dd00dd;font-size:18px;"><b>'.$matchs[2].'</b></font>'.$matchs[3];
}//9933cc myfunctions

function _preg_cb_var($matchs){
	//secho($matchs);
	return  '<font  style="color:#06f;font-size:18px;"><b>'.$matchs[1].'</b></font>';
}//#900





//********start 从_hl.php移过来的函数*****
function _ec($arr,$t=true){

	$i=1;
	echo '<pre><table   border="0" cellspacing="0" cellpadding="0">';
	foreach($arr as $k=>$v){
	if($t){
	echo $v;
	}else{
		if( ($i%2)==0){$bgcolor="#f0f0f0;";}else{$bgcolor="#fcfcfc;";}
			echo "<tr ><td  class='num' style='display:block;color:#999;font-size:18px;width:65px;overflow:hidden;'><b>"
			._format_num($i)
			."</b></td><td style='border-color:#33cc33;width:4000px; border-left-style:solid; border-left-width:4px;".
			"height:12px; padding-left:2px;background-color:".$bgcolor."'>".$v."</td></tr>";
		}
		$i++;
	}
	echo "</table></pre>";
}
function _format_num($a){
if($a<10){return "0000".$a;}	
if($a<100){return "000".$a;}	
if($a<1000){return "00".$a;}	
if($a<10000){return "0".$a;}	
if($a<100000){return "".$a;}	
}
function _code_hl($path)/*_code_highlight*/
{
	$fcontarr=file($path);
	$fcontarr[0]=preg_replace("/[^\w#<>\.\s\/\x{0020}-\x{9fa5}]/u","",$fcontarr[0],3);//解决文件第一行不高亮的问题
	//$fcontarr[0]=preg_replace("/^\s{1,}/","",$fcontarr[0]);
   $fcontarr=_arr_chars_callback($fcontarr,_preg_);
	return $fcontarr;
}
//****************************************
?>
 